A wide variety of implantable medical devices are provided for surgical implantation into humans or animals. One common example is the cardiac pacemaker. Another is the implantable cardioverter defibrillator (ICD). State of the art implantable medical devices often include a programmable microcontroller for controlling the functions of the device to detect medical conditions within the patient in which the device is implanted and to control delivery of appropriate therapy. Within a pacemaker, for example, the microcontroller monitors the detection of P-waves and R-waves within electrical heart signals to determine whether an arrhythmia has occurred and, if so, controls a pulse generator to generate pacing pulses for delivery to the heart. Within an ICD, for example, the microcontroller analyzes P-waves, R-waves and other electrical signals of the heart to determine if an episode of atrial or ventricular fibrillation has occurred and, if so, controls a shocking circuit to generate shocks for delivery to the heart. In addition to performing functions directed to deliver of therapy, the microcontroller coordinates all other functions of the implantable device such as: switching of the mode of operation of the device from, for example, a single-chambered pacing mode to a dual-chambered pacing mode and recording events such as detection of P-waves and R-waves for diagnostic purposes.
The microcontroller uses a wide variety of parameters while performing its various functions. One set of parameters are device trim values, which are provided by the manufacturer to account for variations in tolerances or components arising during manufacture or assembly. For example, some trim values are correction factors for voltage measurements; others define the size of the random access memory (RAM) installed in the device. Trims are typically set to different values for different models and, in some cases, are set to different values for different units of the same model. For example, different models from the same manufacturer may be equipped to perform different functions requiring different trim values. The trim values are set by the manufacturer so as to help the device operate as closely to the design ideals as possible. In some cases, different units of the same model may be assembled using components from different suppliers, thus requiring slightly different trim values. Even when using the same components from the same suppliers, slight variations can nevertheless arise during assembly. Hence, the trim values are preferably optimized for each particular unit. Typically, automatic testing equipment (ATE) is used to test each individual unit following assembly and to then set the device trims for that individual unit accordingly. Usually, the trim values are loaded into RAM within the device by the ATE. Once the trims are set by the ATE, the trims are typically not changed.
Problems, however can arise in connection with trim values stored in RAM in the event of a parity error (i.e. a bit flip). If a parity error occurs in RAM, then every time that memory location is accessed by software of the microcontroller, the software “resets”, preventing the implanted device from functioning properly. Parity errors can typically be corrected merely by reloading the correct data into the RAM address where the parity error occurred—so long as the correct data can be obtained. For many types of data used by an implantable device, nominal values for the data may be retrieved from read only memory (ROM). If so, the device can correct the parity error automatically and continue functioning. For example, ROM may store nominal or default values for various pacing parameters such as base rate, rest rate, etc. In other cases, however, the correct data must be reloaded into the implanted device by an external system, such as a device programmer. This typically may be achieved via remote telemetry so that the device need not be removed from the patient. However, with trim values, the correct trim values for a given device are set by the ATE of the manufacturer and hence can vary from unit to unit. As such, the correct trim values for a given unit are not stored in ROM and are available via an external programmer. Indeed, even the manufacturer may not have a record of trim values originally stored within the RAM of a given unit. Hence, if a parity error occurs within a portion of RAM where trim values are stored, that parity error typically cannot be corrected. The device therefore can no longer use trim values. If the device requires the trim values to operate, the device must then be removed and replaced, at considerable cost, inconvenience and risk.
As can be appreciated, there is a significant need to provide a reliable technique for handling parity errors within trim value memory and it is to this end that the invention is primarily directed.